package com.kanshu.basictest.service.thread;

import android.util.Log;

import com.kanshu.basictest.service.thread.MyAsyncTask;

import java.net.URL;

/**
 * 下载文件的AsyncTask
 */
public class DownloadFileTask extends MyAsyncTask<URL, Integer, Long> {

    private static final String TAG = "DownloadFileTask";


    /**
     * 此方法运行在 {@link #execute(Object[])} 调用的线程上
     */
    @Override
    protected void onPreExecute() {
        //父类中是空实现
        super.onPreExecute();
        Log.i(TAG, "onPreExecute: 线程： " + Thread.currentThread().getName());

    }

    /**
     * 此方法一定 运行在 主线程 上
     */
    @Override
    protected void onProgressUpdate(Integer... values) {
        //父类中是空实现
        super.onProgressUpdate(values);
        Log.i(TAG, "onProgressUpdate: 线程： " + Thread.currentThread().getName());
    }

    /**
     * 此方法一定 运行在 主线程 上
     */
    @Override
    protected void onCancelled(Long aLong) {
        //此方法会调用 onCancelled()
        super.onCancelled(aLong);
        Log.i(TAG, "onCancelled: 线程： " + Thread.currentThread().getName());
    }

    /**
     * 此方法会在 onCancelled(Long aLong) 中调用。
     */
    @Override
    protected void onCancelled() {
        //父类中是空实现
        super.onCancelled();
        Log.i(TAG, "onCancelled: 线程： " + Thread.currentThread().getName());
    }

    /**
     * 此方法一定 运行在 主线程 上
     */
    @Override
    protected void onPostExecute(Long aLong) {
        //父类中是空实现
        super.onPostExecute(aLong);
        Log.i(TAG, "onPostExecute: 线程： " + Thread.currentThread().getName());//main
    }


    /**
     * 此方法一定运行在线程池中的 子线程上
     * AsyncTask 中唯一的抽象方法
     */
    @Override
    protected Long doInBackground(URL... urls) {
        Log.i(TAG, "doInBackground: 线程： " + Thread.currentThread().getName()); //AsyncTask #1
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return 1L;
    }
}
